<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 原型链

      // 对象是有自身和原型构成 ，原型又是一个对象。。。原型链

      //   let obj = {
      //     name: "张三",
      //     age: 20,
      //   };
      //   let obj2 = new Object();
      //   obj2.name = "李四";
      //   obj2.age = 21;
      //   console.log(obj2);
      //   //   let obj = {
      //   //     name: "张三",
      //   //     age: 20,
      //   //   };

      //   // console.log(obj);
      //   Object.setPrototypeOf(obj, {
      //     height: "178cm",
      //   });

      //   console.log(obj);

      // 顶层的原型 是null
      // console.log(  Object.prototype.__proto__);

      // 对象的属性或者方法查找顺序；
      // 对象先在自身查找属性和方法 ，如果没有找到 在原型上查找 ，
      // 如果还没有找到会在原型链上查找，如果还没找到就返还undefined；

      //   Object.prototype.age = 30;

      //   function Person() {
      //     this.age = 10;
      //   }

      //   Person.prototype.age = 20;

      //   let zhangsan = new Person();
      //   console.log(zhangsan.age);

      // 找自身 ，在原型，找原型链，如果都没有返还undefined；

      //注意： 对象的循环问题，for in :会循环自身和原型链上的内容；
      Object.prototype.num = "10";

      let obj = {
        name: "张安",
        age: 20,
      };

      Object.setPrototypeOf(obj, { height: "178cm" });
      console.log(obj);
      for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
          console.log(key);
        }
      }

      // 通过一个函数判断 某个属性或者方法是否是对象的自身属性和方法；obj.hasOwnProperty('key');
    </script>
  </body>
</html>
